package org.dromara.netbar.domain.vo;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.dromara.netbar.domain.NetbarCoupon;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;



/**
 * 通用卡券视图对象 netbar_coupon
 *
 * @author Lion Li
 * @date 2025-07-09
 */
@Data
@ExcelIgnoreUnannotated
@JsonInclude(JsonInclude.Include.NON_NULL)
@AutoMapper(target = NetbarCoupon.class)
public class NetbarCouponVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;
    private String tenantId;
    /**
     * 卡券唯一ID
     */
    @ExcelProperty(value = "卡券唯一ID")
    private Long couponId;

    /**
     * 卡券类型：代金券/包时券/折扣券
     */
    @ExcelProperty(value = "卡券类型：代金券/包时券/折扣券")
    private String couponType;

    /**
     * 卡券金额（代金券专用，如50元）
     */
    @ExcelProperty(value = "卡券金额", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "卡券金额")
    private Long couponAmount;

    /**
     * 购买金额（通用字段）
     */
    @ExcelProperty(value = "购买金额", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "购买金额")
    private Long purchaseAmount;

    /**
     * 生效金额（代金券字段）
     */
    @ExcelProperty(value = "生效金额", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "生效金额")
    private Long effectiveAmount;

    /**
     * 有效期类型：1=永久，2=指定日期
     */
    @ExcelProperty(value = "有效期类型：1=永久，2=指定日期")
    private Long validTermType;

    /**
     * 有效期开始（valid_term_type=2时必填）
     */
    @ExcelProperty(value = "有效期开始", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "v=alid_term_type=2时必填")
    private Date validDateStart;

    /**
     * 有效期结束（valid_term_type=2时必填）
     */
    @ExcelProperty(value = "有效期结束", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "v=alid_term_type=2时必填")
    private Date validDateEnd;

    /**
     * 是否自动使用：1=自动，2=手动
     */
    @ExcelProperty(value = "是否自动使用：1=自动，2=手动")
    private Long isAutoUse;

    /**
     * 卡券名称（自动拼接）
     */
    @ExcelProperty(value = "卡券名称", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "自=动拼接")
    private String couponName;

    /**
     * 有效区域（包时券/折扣券专用，如全区域、大厅）
     */
    @ExcelProperty(value = "有效区域", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "包=时券/折扣券专用，如全区域、大厅")
    private Long validArea;

    /**
     * 包时时长（小时，包时券专用，如3小时）
     */
    @ExcelProperty(value = "包时时长", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "小=时，包时券专用，如3小时")
    private Long hourDuration;

    /**
     * 可用时段开始（包时券专用，如8点-23点）
     */
    @ExcelProperty(value = "可用时段开始", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "包=时券专用，如8点-23点")
    private String usableTimeStart;

    /**
     * 可用时段结束（包时券专用，如8点-23点）
     */
    @ExcelProperty(value = "可用时段结束", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "包=时券专用，如8点-23点")
    private String usableTimeEnd;

    /**
     * 折扣力度（折扣券专用，如7折）
     */
    @ExcelProperty(value = "折扣力度", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "折=扣券专用，如7折")
    private Long discountRate;

    /**
     * 是否过期
     */
    private Boolean isExpired = false;

    private Date useTime;

    /**
     * 会员等级ID（升级会员等级卡券专用）
     */
    private Long memberLevelId;
}
